<!doctype html>
<!--
Copyright (c) 2014 The Polymer Project Authors. All rights reserved.
This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt
The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt
The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt
Code distributed by Google as part of the polymer project is also
subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt
-->
<html>
  <head>
    <title>computed properties</title>
    <script src="../../../webcomponentsjs/webcomponents.js"></script>
    <link rel="import" href="../../polymer.html">
    <script src="../../../tools/test/htmltest.js"></script>
    <script src="../../../tools/test/chai/chai.js"></script>
  </head>
  <body>
    <polymer-element name="x-foo" attributes="a b concat upper">
      <template>{{ a }}:{{ b }}:{{ concat }}:{{ upper }}</template>
      <script>
        Polymer('x-foo', {
          computed: {
            concat: "a + b",
            upper: "toUpperCase(concat)",
          },
          toUpperCase: function(str) {
            return str.toUpperCase();
          }
        })
      </script>
    </polymer-element>

    <polymer-element name="computed-properties-test">
      <template>
        <x-foo id="foo" a="a" b="b" concat="{{ concat }}" upper="{{ upper }}"></x-foo>
      </template>
      <script>
        Polymer('computed-properties-test', {
          concat: null,
          upper: null,
          ready: function() {
            var foo = this.$.foo;
            chai.assert.equal(foo.shadowRoot.innerHTML, 'a:b:ab:AB');
            chai.assert.equal(this.concat, 'ab');
            chai.assert.equal(this.upper, 'AB');
            chai.assert.equal(foo.concat, 'ab');
            chai.assert.equal(foo.upper, 'AB');
            foo.concat = 'bogus';
            foo.upper = 'bogus';
            chai.assert.equal(this.concat, 'ab');
            chai.assert.equal(this.upper, 'AB');
            chai.assert.equal(foo.concat, 'ab');
            chai.assert.equal(foo.upper, 'AB');
            done();
          }
        })
      </script>
    </polymer-element>

    <computed-properties-test></computed-properties-test>
  </body>
</html>
